class Solution {
public:
    int numSubarrayProductLessThanK(vector<int>& nums, int k) {
        // 这道题和昨天那道很类似，都是使用滑动窗口解决
        // nums[i] ≥ 1，乘积不可能小于 1，所以当 k ≤ 1 时，没有这样的子数组，直接返回 0
        if(k <= 1)
            return 0;
        int n = nums.size(), ret = 0, left = 0, tmp = 1;
        for(int right = 0; right < n; right++)
        {
            tmp *= nums[right];
            while(tmp >= k)
            {
                tmp /= nums[left];
                left++;
            }
            ret += right - left + 1;
        }
        return ret;
    }
};